S   ::= D | S1
S1  ::= lf S
D   ::=  WordToken "::=" E L

L   ::=  L2 | Empty
L2  ::=  lf  L3
L3  ::=  L | D

E   ::=  T E1
E1  ::=  Empty | E1a
E1a ::=  "|" E

T   ::= T1 T2
T1  ::= WordToken| QuotedStringToken
T2  ::= Empty | T